package com.bipbip.modelo;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.validation.constraints.Size;

import lombok.Data;

import org.apache.log4j.Logger;
import org.springframework.context.annotation.Scope;

@Entity
@Table(name = "Publicacion")
@Scope("session")
public @Data
class Publicacion {

	private static final Logger log = Logger.getLogger(Publicacion.class);

	@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "publicacion")
	protected Viaje viaje;

	@Id
	@Column(name = "id")
	@GeneratedValue(strategy = GenerationType.AUTO)
	protected Integer id;

	@Size(min = 1, message = "El titulo no puede estar vacio")
	@Column(name = "titulo")
	protected String titulo;

	@Size(min = 1, message = "El mensaje no puede estar vacio")
	@Column(name = "mensaje")
	protected String mensaje;

	@Column(name = "fecha_posteo")
	protected Date fechaPosteo;

	@Size(min = 1, message = "debe ingresar al menos un tag")
	@Column(name = "tags")
	protected String tags;

	@Column(name = "idUsuario")
	private Integer usuario;

	@Column(name = "idVehiculo")
	private Integer vehiculo;

	@Column(name = "tipo")
	private Integer tipo;

	@Column(name = "destacado")
	private boolean destacado;

	public Publicacion() {

	}

	public void setFechaPosteo(Date fecha) {
		fechaPosteo = fecha;
	}

	public void setFechaPosteo(String xfecha) {
		// se transforma el string en fecha
		SimpleDateFormat formatoDelTexto = new SimpleDateFormat("dd/MM/yyyy");
		Date fecha = null;
		try {
			fecha = formatoDelTexto.parse(xfecha);
		} catch (Exception ex) {
			log.error("Error en la fecha", ex);
		}
		this.fechaPosteo = fecha;
	}

	@Override
	public boolean equals(Object o) {
		return o.getClass() == this.getClass()
				&& ((Publicacion) o).id == this.id;
	}
}
